
package GUI;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.sql.Date;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Iterator;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;

import BaseDatos.BD;
import Codigo.DatosRecaudacion;
import JSON.JSONException;
import JSON.JSONObject;
import javax.swing.JTextArea;
import javax.swing.JLabel;
import java.awt.Color;
import java.awt.Font;

public class FrameArqueoCaja extends JFrame {

	private JPanel contentPane;
	private File file = new File("./fondo.jpg");
	private JTable tablaArqueo;
	private BD baseDatos = new BD();
	private JButton btnConfirmar;
	private JTextArea textArea;
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					FrameArqueoCaja frame = new FrameArqueoCaja();
					frame.setTitle("Arqueo de Caja");
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 * @throws IOException 
	 */
	public FrameArqueoCaja() throws IOException {
		setTitle("Arqueo de Caja");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 915, 617);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		
		BufferedImage tmpImagen=ImageIO.read(file); 
		bgBorder fondo = new bgBorder(tmpImagen);
		contentPane.setBorder(fondo);
		contentPane.setLayout(null);
		
		btnConfirmar = new JButton("Confirmar");
		btnConfirmar.setBounds(252, 388, 168, 52);
		contentPane.add(btnConfirmar);
		JScrollPane scrollPane = new JScrollPane();
		contentPane.add(scrollPane);
		scrollPane.setBounds(25, 24, 452, 343);
		
		tablaArqueo = new JTable();
		scrollPane.setViewportView(tablaArqueo);
		tablaArqueo.setModel(new DefaultTableModel(
			new Object[][] {

					{null, null}, 
					{null, null}, 
					{null, null}, 
					{null, null}, 
					{null, null}, 
					{null, null},
					{null, null}, 
					{null, null}, 
					{null, null}, 
					{null, null}, 
					{null, null}, 
					{null, null}, 
					{null, null}, 
					{null, null},
					{null, null}, 
					{null, null}, 
					{null, null}, 
					{null, null}, 
					{null, null}, 
			},
			new String[] {
				"Facturas", "Pedidos"
			}
		) {
			boolean[] columnEditables = new boolean[] {
				false, false
			};
			public boolean isCellEditable(int row, int column) {
				return columnEditables[column];
			}
		});
		
		textArea = new JTextArea();
		textArea.setBounds(508, 81, 299, 171);
		contentPane.add(textArea);
		
		JLabel lblResumenDelDa = new JLabel("Resumen del d\u00EDa");
		lblResumenDelDa.setFont(new Font("Tahoma", Font.ITALIC, 17));
		lblResumenDelDa.setForeground(Color.WHITE);
		lblResumenDelDa.setBounds(508, 47, 173, 23);
		contentPane.add(lblResumenDelDa);
 
        String  info = "Resumen del dia \nGanancias:\nPerdidas:";
		textArea.setText(info);
		
		btnConfirmar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
			
				//Fecha de hoy
				Calendar c = Calendar.getInstance();
				String dia = Integer.toString(c.get(Calendar.DATE));
				int diaint = Integer.parseInt(dia);
				if (diaint < 10)
					dia = "0"+dia; 
					
				String mes = Integer.toString(c.get(Calendar.MONTH));
				int enteroMes = Integer.parseInt(mes)+1;
				if(enteroMes<=9){
					mes = "0"+enteroMes;
				}
				String annio = Integer.toString(c.get(Calendar.YEAR));
				String fechaHoy =(annio.concat("-").concat(mes));
				String fechaHoyFormateada = fechaHoy.concat("-").concat(dia);
	
				//Saco los empleados de la base de datos y compruebo cuales son camareros
				ArrayList<JSONObject> listaEmpleados = baseDatos.listaUsuarios();
				if (listaEmpleados != null){
				Iterator<JSONObject> it = listaEmpleados.iterator();
				while (it.hasNext()){
				    JSONObject empleado = it.next();
				    try {
				    	int numFactura=0,numPedido=0;
						String cargo = empleado.getString("permisos");
						if (cargo.equals("camarero")){
							   String nombreCamarero = empleado.getString("nombre");
								//Mostramos las facturas de ese camarero
							    ArrayList<JSONObject> listaFacturasPropias = baseDatos.listaFacturaFecha(nombreCamarero, fechaHoyFormateada);
							    if(listaFacturasPropias!= null){
							    	Iterator<JSONObject> iterator = listaFacturasPropias.iterator();
							    	double precioFacturai =0;
							    	double precioTotal =0;
							    	while (iterator.hasNext()){
							    		//Sumar el coste de las faturas
										    JSONObject factura = iterator.next();
										    if (factura.getString("cobrado").equals("1")){
										      //Mostramos por la tabla las facturas
										       String empleadoNombre= factura.getString("empleado");
										       String nomEmpleado = baseDatos.getNombreUsuario(empleadoNombre);
										       String fechaFactura=factura.getString("hora");
										       String precioFactura = baseDatos.getPrecioFactura(factura.getString("id"));
										       precioFacturai = precioFacturai + Double.parseDouble(precioFactura);
									           String infoEmpleado = nomEmpleado + " " + fechaFactura+ " ";//+precioFactura;
										       tablaArqueo.setValueAt(infoEmpleado, numFactura, 0);
										       numFactura++;
							    	
										    }
										   
							    	}
							    	tablaArqueo.setValueAt("Total:  "+String.valueOf(precioFacturai), numFactura++, 0);
							    
								    ArrayList<JSONObject> listaPedidosPropias = baseDatos.listaPedidos();
								    if(listaPedidosPropias!= null){
								    	Iterator<JSONObject> iterator1 = listaPedidosPropias.iterator();
								    	while (iterator1.hasNext()){
										    JSONObject pedido = iterator1.next();
										    if (pedido.getString("recibido").equals("1") && pedido.getString("emitido").equals(fechaHoyFormateada)){
											    String nomProveedor = pedido.getString("proveedor");
											    
											    String InfoProducto = baseDatos.getNombreProducto(pedido.getString("producto"));
											    String info = nomProveedor+" "+InfoProducto+" "+pedido.getString("precio");
				                                precioTotal = precioTotal + Double.parseDouble(pedido.getString("precio"));
											    tablaArqueo.setValueAt(info, numPedido, 1);
											    numPedido++;
										    }
								    	   }	    	
								    	tablaArqueo.setValueAt("Total:  "+String.valueOf(precioTotal), numPedido++, 1);
								    	
								    	}	
								    String diferencia = String.valueOf(precioFacturai -precioTotal);
							
								    DatosRecaudacion recauda = new DatosRecaudacion(dia, mes, annio, String.valueOf(precioTotal), String.valueOf(precioFacturai), String.valueOf(diferencia));
								    baseDatos.altaRecaudacion(recauda);
								    String  info = "Resumen del dia \nGanancias:" +diferencia;
								    textArea.setText(info);   
						           }
							    }
	
					} catch (JSONException e) {
						 
						e.printStackTrace();
					}
	
				}
			   }
				else JOptionPane.showMessageDialog(null, "No hay Facturas");
			}
		});

	}
}

